home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / share / vim / vim72 / scripts.vim < prev    next >
Encoding:
Text File  |  2010-07-11  |  9.7 KB  |  365 lines

  1. " Vim support file to detect file types in scripts
  2. "
  3. " Maintainer:    Bram Moolenaar <Bram@vim.org>
  4. " Last change:    2009 Dec 24
  5.  
  6. " This file is called by an autocommand for every file that has just been
  7. " loaded into a buffer.  It checks if the type of file can be recognized by
  8. " the file contents.  The autocommand is in $VIMRUNTIME/filetype.vim.
  9.  
  10.  
  11. " Only do the rest when the FileType autocommand has not been triggered yet.
  12. if did_filetype()
  13.   finish
  14. endif
  15.  
  16. " Load the user defined scripts file first
  17. " Only do this when the FileType autocommand has not been triggered yet
  18. if exists("myscriptsfile") && filereadable(expand(myscriptsfile))
  19.   execute "source " . myscriptsfile
  20.   if did_filetype()
  21.     finish
  22.   endif
  23. endif
  24.  
  25. " Line continuation is used here, remove 'C' from 'cpoptions'
  26. let s:cpo_save = &cpo
  27. set cpo&vim
  28.  
  29. let s:line1 = getline(1)
  30.  
  31. if s:line1 =~ "^#!"
  32.   " A script that starts with "#!".
  33.  
  34.   " Check for a line like "#!/usr/bin/env VAR=val bash".  Turn it into
  35.   " "#!/usr/bin/bash" to make matching easier.
  36.   if s:line1 =~ '^#!\s*\S*\<env\s'
  37.     let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
  38.     let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
  39.   endif
  40.  
  41.   " Get the program name.
  42.   " Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
  43.   " If the word env is used, use the first word after the space:
  44.   " "#!/usr/bin/env perl [path/args]"
  45.   " If there is no path use the first word: "#!perl [path/args]".
  46.   " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
  47.   if s:line1 =~ '^#!\s*\a:[/\\]'
  48.     let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
  49.   elseif s:line1 =~ '^#!.*\<env\>'
  50.     let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
  51.   elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
  52.     let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
  53.   else
  54.     let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
  55.   endif
  56.  
  57.   " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
  58.   " third line.  Suggested by Steven Atkinson.
  59.   if getline(3) =~ '^exec wish'
  60.     let s:name = 'wish'
  61.   endif
  62.  
  63.   " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
  64.   if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
  65.     call SetFileTypeSH(s:line1)    " defined in filetype.vim
  66.  
  67.     " csh scripts
  68.   elseif s:name =~ '^csh\>'
  69.     if exists("g:filetype_csh")
  70.       call SetFileTypeShell(g:filetype_csh)
  71.     else
  72.       call SetFileTypeShell("csh")
  73.     endif
  74.  
  75.     " tcsh scripts
  76.   elseif s:name =~ '^tcsh\>'
  77.     call SetFileTypeShell("tcsh")
  78.  
  79.     " Z shell scripts
  80.   elseif s:name =~ '^zsh\>'
  81.     set ft=zsh
  82.  
  83.     " TCL scripts
  84.   elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
  85.     set ft=tcl
  86.  
  87.     " Expect scripts
  88.   elseif s:name =~ '^expect\>'
  89.     set ft=expect
  90.  
  91.     " Gnuplot scripts
  92.   elseif s:name =~ '^gnuplot\>'
  93.     set ft=gnuplot
  94.  
  95.     " Makefiles
  96.   elseif s:name =~ 'make\>'
  97.     set ft=make
  98.  
  99.     " Lua
  100.   elseif s:name =~ 'lua'
  101.     set ft=lua
  102.  
  103.     " Perl
  104.   elseif s:name =~ 'perl'
  105.     set ft=perl
  106.  
  107.     " PHP
  108.   elseif s:name =~ 'php'
  109.     set ft=php
  110.  
  111.     " Python
  112.   elseif s:name =~ 'python'
  113.     set ft=python
  114.  
  115.     " Groovy
  116.   elseif s:name =~ '^groovy\>'
  117.     set ft=groovy
  118.  
  119.     " Ruby
  120.   elseif s:name =~ 'ruby'
  121.     set ft=ruby
  122.  
  123.     " BC calculator
  124.   elseif s:name =~ '^bc\>'
  125.     set ft=bc
  126.  
  127.     " sed
  128.   elseif s:name =~ 'sed\>'
  129.     set ft=sed
  130.  
  131.     " OCaml-scripts
  132.   elseif s:name =~ 'ocaml'
  133.     set ft=ocaml
  134.  
  135.     " Awk scripts
  136.   elseif s:name =~ 'awk\>'
  137.     set ft=awk
  138.  
  139.     " Website MetaLanguage
  140.   elseif s:name =~ 'wml'
  141.     set ft=wml
  142.  
  143.     " Scheme scripts
  144.   elseif s:name =~ 'scheme'
  145.     set ft=scheme
  146.  
  147.     " CFEngine scripts
  148.   elseif s:name =~ 'cfengine'
  149.     set ft=cfengine
  150.  
  151.   endif
  152.   unlet s:name
  153.  
  154. else
  155.   " File does not start with "#!".
  156.  
  157.   let s:line2 = getline(2)
  158.   let s:line3 = getline(3)
  159.   let s:line4 = getline(4)
  160.   let s:line5 = getline(5)
  161.  
  162.   " Bourne-like shell scripts: sh ksh bash bash2
  163.   if s:line1 =~ '^:$'
  164.     call SetFileTypeSH(s:line1)    " defined in filetype.vim
  165.  
  166.     " Z shell scripts
  167.   elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>'
  168.     set ft=zsh
  169.  
  170.   " ELM Mail files
  171.   elseif s:line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
  172.     set ft=mail
  173.  
  174.     " Mason
  175.   elseif s:line1 =~ '^<[%&].*>'
  176.     set ft=mason
  177.  
  178.     " Vim scripts (must have '" vim' as the first line to trigger this)
  179.   elseif s:line1 =~ '^" *[vV]im$'
  180.     set ft=vim
  181.  
  182.     " MOO
  183.   elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
  184.     set ft=moo
  185.  
  186.     " Diff file:
  187.     " - "diff" in first line (context diff)
  188.     " - "Only in " in first line
  189.     " - "--- " in first line and "+++ " in second line (unified diff).
  190.     " - "*** " in first line and "--- " in second line (context diff).
  191.     " - "# It was generated by makepatch " in the second line (makepatch diff).
  192.     " - "Index: <filename>" in the first line (CVS file)
  193.     " - "=== ", line of "=", "---", "+++ " (SVK diff)
  194.     " - "=== ", "--- ", "+++ " (bzr diff, common case)
  195.     " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
  196.   elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
  197.     \ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
  198.     \ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
  199.     \ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
  200.     \ || (s:line1 =~ '^=== ' && ((s:line2 =~ '^=\{66\}' && s:line3 =~ '^--- ' && s:line4 =~ '^+++') || (s:line2 =~ '^--- ' && s:line3 =~ '^+++ ')))
  201.     \ || (s:line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
  202.     set ft=diff
  203.  
  204.     " PostScript Files (must have %!PS as the first line, like a2ps output)
  205.   elseif s:line1 =~ '^%![ \t]*PS'
  206.     set ft=postscr
  207.  
  208.     " M4 scripts: Guess there is a line that starts with "dnl".
  209.   elseif s:line1 =~ '^\s*dnl\>'
  210.     \ || s:line2 =~ '^\s*dnl\>'
  211.     \ || s:line3 =~ '^\s*dnl\>'
  212.     \ || s:line4 =~ '^\s*dnl\>'
  213.     \ || s:line5 =~ '^\s*dnl\>'
  214.     set ft=m4
  215.  
  216.     " AmigaDos scripts
  217.   elseif $TERM == "amiga"
  218.     \ && (s:line1 =~ "^;" || s:line1 =~ '^\.[bB][rR][aA]')
  219.     set ft=amiga
  220.  
  221.     " SiCAD scripts (must have procn or procd as the first line to trigger this)
  222.   elseif s:line1 =~? '^ *proc[nd] *$'
  223.     set ft=sicad
  224.  
  225.     " Purify log files start with "****  Purify"
  226.   elseif s:line1 =~ '^\*\*\*\*  Purify'
  227.     set ft=purifylog
  228.  
  229.     " XML
  230.   elseif s:line1 =~ '<?\s*xml.*?>'
  231.     set ft=xml
  232.  
  233.     " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
  234.   elseif s:line1 =~ '\<DTD\s\+XHTML\s'
  235.     set ft=xhtml
  236.  
  237.     " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
  238.   elseif s:line1 =~? '\<DOCTYPE\s\+html\>'
  239.     set ft=html
  240.  
  241.     " PDF
  242.   elseif s:line1 =~ '^%PDF-'
  243.     set ft=pdf
  244.  
  245.     " XXD output
  246.   elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
  247.     set ft=xxd
  248.  
  249.     " RCS/CVS log output
  250.   elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:'
  251.     set ft=rcslog
  252.  
  253.     " CVS commit
  254.   elseif s:line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
  255.     set ft=cvs
  256.  
  257.     " Prescribe
  258.   elseif s:line1 =~ '^!R!'
  259.     set ft=prescribe
  260.  
  261.     " Send-pr
  262.   elseif s:line1 =~ '^SEND-PR:'
  263.     set ft=sendpr
  264.  
  265.     " SNNS files
  266.   elseif s:line1 =~ '^SNNS network definition file'
  267.     set ft=snnsnet
  268.   elseif s:line1 =~ '^SNNS pattern definition file'
  269.     set ft=snnspat
  270.   elseif s:line1 =~ '^SNNS result file'
  271.     set ft=snnsres
  272.  
  273.     " Virata
  274.   elseif s:line1 =~ '^%.\{-}[Vv]irata'
  275.     \ || s:line2 =~ '^%.\{-}[Vv]irata'
  276.     \ || s:line3 =~ '^%.\{-}[Vv]irata'
  277.     \ || s:line4 =~ '^%.\{-}[Vv]irata'
  278.     \ || s:line5 =~ '^%.\{-}[Vv]irata'
  279.     set ft=virata
  280.  
  281.     " Strace
  282.   elseif s:line1 =~ '^\(\[pid \d\+\] \)\=[0-9:.]* *execve(' || s:line1 =~ '^__libc_start_main'
  283.     set ft=strace
  284.  
  285.     " VSE JCL
  286.   elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>'
  287.     set ft=vsejcl
  288.  
  289.     " TAK and SINDA
  290.   elseif s:line4 =~ 'K & K  Associates' || s:line2 =~ 'TAK 2000'
  291.     set ft=takout
  292.   elseif s:line3 =~ 'S Y S T E M S   I M P R O V E D '
  293.     set ft=sindaout
  294.   elseif getline(6) =~ 'Run Date: '
  295.     set ft=takcmp
  296.   elseif getline(9) =~ 'Node    File  1'
  297.     set ft=sindacmp
  298.  
  299.     " DNS zone files
  300.   elseif s:line1.s:line2.s:line3.s:line4 =~ '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA'
  301.     set ft=bindzone
  302.  
  303.     " BAAN
  304.   elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC '
  305.     \ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC '
  306.     set ft=baan
  307.  
  308.   " Valgrind
  309.   elseif s:line1 =~ '^==\d\+== valgrind' || s:line3 =~ '^==\d\+== Using valgrind'
  310.     set ft=valgrind
  311.  
  312.   " Renderman Interface Bytestream
  313.   elseif s:line1 =~ '^##RenderMan'
  314.     set ft=rib
  315.  
  316.   " Scheme scripts
  317.   elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme'
  318.     set ft=scheme
  319.  
  320.   " rst files
  321.   elseif s:line1 =~ '^\.\.\s\|^\s*restindex\s*$'
  322.     \ || s:line2 =~ '^\.\.\s\|^\s*restindex\s*$'
  323.     \ || s:line3 =~ '^\.\.\s\|^\s*restindex\s*$'
  324.     \ || s:line4 =~ '^\.\.\s\|^\s*restindex\s*$'
  325.     \ || s:line5 =~ '^\.\.\s\|^\s*restindex\s*$'
  326.     set ft=rst
  327.  
  328.   " Git output
  329.   elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
  330.     set ft=git
  331.  
  332.   " CVS diff
  333.   else
  334.     let s:lnum = 1
  335.     while getline(s:lnum) =~ "^? " && s:lnum < line("$")
  336.       let s:lnum += 1
  337.     endwhile
  338.     if getline(s:lnum) =~ '^Index:\s\+\f\+$'
  339.       set ft=diff
  340.  
  341.       " locale input files: Formal Definitions of Cultural Conventions
  342.       " filename must be like en_US, fr_FR@euro or en_US.UTF-8
  343.     elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
  344.       let s:lnum = 1
  345.       while s:lnum < 100 && s:lnum < line("$")
  346.     if getline(s:lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
  347.       setf fdcc
  348.       break
  349.     endif
  350.     let s:lnum += 1
  351.       endwhile
  352.     endif
  353.     unlet s:lnum
  354.  
  355.   endif
  356.  
  357.   unlet s:line2 s:line3 s:line4 s:line5
  358.  
  359. endif
  360.  
  361. " Restore 'cpoptions'
  362. let &cpo = s:cpo_save
  363.  
  364. unlet s:cpo_save s:line1
  365.